package cn.tedu.jsd2206csmall.product.service.impl;

import cn.tedu.jsd2206csmall.product.web.ServiceCode;
import cn.tedu.jsd2206csmall.product.ex.ServiceException;
import cn.tedu.jsd2206csmall.product.mapper.BrandCategoryMapper;
import cn.tedu.jsd2206csmall.product.mapper.CategoryAttributeTemplateMapper;
import cn.tedu.jsd2206csmall.product.mapper.CategoryMapper;
import cn.tedu.jsd2206csmall.product.mapper.SpuMapper;
import cn.tedu.jsd2206csmall.product.pojo.dto.CategoryAddNewDTO;
import cn.tedu.jsd2206csmall.product.pojo.entity.Category;
import cn.tedu.jsd2206csmall.product.pojo.vo.CategoryListItemVO;
import cn.tedu.jsd2206csmall.product.pojo.vo.CategoryStandardVO;
import cn.tedu.jsd2206csmall.product.service.ICategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 处理类别业务的实现类
 *
 * @author java@tedu.cn
 * @version 0.0.1
 */
@Slf4j
@Service
public class CategoryServiceImpl implements ICategoryService {

    @Autowired
    private CategoryMapper categoryMapper;
    @Autowired
    private BrandCategoryMapper brandCategoryMapper;
    @Autowired
    private CategoryAttributeTemplateMapper categoryAttributeTemplateMapper;
    @Autowired
    private SpuMapper spuMapper;

    public CategoryServiceImpl() {
        log.info("创建业务对象：CategoryServiceImpl");
    }

    @Override
    public void addNew(CategoryAddNewDTO categoryAddNewDTO) {
        log.debug("开始处理【添加类别】的业务，参数：{}", categoryAddNewDTO);

        // 调用Mapper对象的【根据名称统计数量】方法进行统计
        String name = categoryAddNewDTO.getName();
        int count = categoryMapper.countByName(name);
        log.trace("根据名称【{}】统计数量：{}", name, count);
        // 判断统计结果是否大于0
        if (count > 0) {
            // 是：名称已经被占用，抛出异常（CONFLICT）
            String message = "添加类别失败，尝试添加的类别名称【" + name + "】已经存在！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT, message);
        }


        // 创建Category实体类的对象
        Category category = new Category();
        // 将参数DTO的各属性值复制到Category实体类对象中
        BeanUtils.copyProperties(categoryAddNewDTO, category);
        categoryMapper.insert(category);

    }

    @Override
    public void deleteById(Long id) {
        log.debug("开始处理【删除类别】的业务，参数：{}", id);
        // 调用Mapper对象的【根据id查询详情】查询数据，是当前尝试删除的数据
        CategoryStandardVO currentCategory = categoryMapper.getStandardById(id);
        // 判断查询结果是否为null
        if (currentCategory == null) {
            // 是：数据不存在，抛出异常（ERR_NOT_FOUND）
            String message = "删除类别失败，尝试删除的类别不存在！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }
    }
}